home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1995 April / Internet Tools.iso / ip / nfs / nfstrace.shar.Z / nfstrace.shar / nit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-06  |  2.5 KB  |  136 lines

  1. #include<sys/types.h>
  2. #include<sys/socket.h>
  3. #include <rpc/rpc.h>
  4. #include<net/if.h>
  5. #include<netinet/in_systm.h>
  6. #include<netinet/in.h>
  7. #include<netinet/ip.h>
  8. #include<netinet/udp.h>
  9. #include<netinet/if_ether.h>
  10. #include<rpc/types.h>
  11. #include<sys/param.h>
  12. #include<sys/time.h>
  13. #include <sys/file.h>
  14. #include <sys/errno.h>
  15. #include <sys/ioctl.h>
  16.  
  17. #include <signal.h>
  18. #include<netdb.h>
  19. #include "rpcspy.h"
  20. #include <sys/stropts.h>
  21. #include<net/packetfilt.h>
  22. #include <stdio.h>
  23.  
  24.  
  25. int dropped=0;
  26. int pr=0;
  27. extern int ok, call, fgc;
  28. long secs;    /* current time in secs */
  29. int ser;    /* packets this second */
  30. int clk();
  31. int die();
  32.  
  33. struct packetfilt filt = {
  34.     10, 4,
  35.     ENF_PUSHWORD + 6,
  36.     ENF_PUSHLIT, 0x0800,
  37.     ENF_EQ
  38. };
  39.  
  40.  
  41. char pint[64];
  42.  
  43. net_open(interface)
  44.      char *interface;
  45. {
  46.     int efd;
  47.     unsigned long bits;
  48.     int one=1;
  49.     unsigned int back=32;
  50.     struct strioctl si;
  51.     struct ifreq ifr;
  52.     unsigned long sl=0;
  53.     struct timeval to;
  54.  
  55.     strcpy(pint,interface);
  56.     if ((efd=open("/dev/nit",O_RDONLY)) <0) {
  57.         return(efd);
  58.     }
  59.     /* install filter */
  60.     if (ioctl(efd,I_PUSH,"pf")<0)
  61.         return -1;
  62.     si.ic_cmd=NIOCSETF;
  63.     si.ic_len=sizeof filt;
  64.     si.ic_dp= (char *)&filt;
  65.     if (ioctl(efd,I_STR,&si)<0)
  66.         return -1;
  67.     ioctl(efd,I_SRDOPT,RMSGD); 
  68.     si.ic_timout=INFTIM;
  69.     strcpy(ifr.ifr_name,interface);
  70.     si.ic_cmd=NIOCBIND;
  71.     si.ic_len=sizeof ifr;
  72.     si.ic_dp= (char *)𝔦
  73.     if (ioctl(efd,I_STR,&si)<0)
  74.         return -1;
  75.     to.tv_sec=0;
  76.     to.tv_usec=0;
  77.     si.ic_cmd=NIOCSSNAP;
  78.     si.ic_len=sizeof sl;
  79.     si.ic_dp=(char *)&sl;
  80.     if (ioctl(efd,I_STR,&si)<0)
  81.         return -1;
  82.     bits =
  83. #ifdef STAMPS
  84.         NI_TIMESTAMP | NI_DROPS |
  85. #endif
  86.         NI_PROMISC ;
  87.     si.ic_cmd=NIOCSFLAGS;
  88.     si.ic_len=sizeof bits;
  89.     si.ic_dp=(char *)&bits;
  90.     if (ioctl(efd,I_STR,&si)<0)
  91.         return -1;
  92.         signal(SIGINT, die);
  93.         signal(SIGHUP, die);
  94.     ioctl(efd,I_FLUSH,FLUSHR);
  95.     return efd;
  96. }
  97.  
  98. net_read(efd,buf,len)
  99.      int efd;
  100.      ether_packet *buf;
  101.      int len;
  102. {
  103.     int r;
  104.     char *cp;
  105.     struct timeval tv;
  106.     struct timezone tvp;
  107.  
  108.     r=read(efd,buf,len);
  109.     if (r<0)
  110.         return r;
  111. #ifdef STAMPS
  112.     cp=(char *)buf;
  113.     secs=((struct nit_iftime *)cp)->nh_timestamp.tv_sec;
  114.     ser=((struct nit_iftime *)cp)->nh_timestamp.tv_usec;
  115.     cp += sizeof(struct nit_iftime);
  116.     dropped = ((struct nit_ifdrops *)cp)->nh_drops;
  117. #else /* for screwed up timestamps */
  118.  
  119.     gettimeofday(&tv,&tvp);
  120.     secs=tv.tv_sec;
  121.     ser=tv.tv_usec;
  122.     /* fprintf(stderr,"%d %d %d\n",secs,ser,dropped); */
  123. #endif
  124.     pr++;
  125.     return r;
  126. }
  127.  
  128.  
  129.  
  130. die()
  131. {
  132.     printf("\n# flush (processed = %d, dropped = %d, call=%d, ok=%d, fgc=%d)\n",
  133.     pr,dropped,call,ok,fgc);
  134.     exit(0);
  135. }
  136.